iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
Python

Python大戰之網頁爬蟲系列 第 10

[Day 10] 反爬蟲機制

  • 分享至 

  • xImage
  •  

資料爬蟲是進行資料分析的第一步,只有取得可靠的資料,
才能展開高品質的資料科學研究。
對於資料科學領域的開發者來說,爬蟲技術會是他們首先面臨的挑戰之一。

然而,當你掌握了爬蟲技術並開始實際操作時,會發現有些網站比預期的難以抓取。
隨著自動化爬蟲技術的普及,許多網站也開始實施「反爬蟲」措施,
阻止開發者輕易獲取所需的資料。

在今天的學習中,我就要先來學習「反爬蟲」的這個概念。

什麼是反爬蟲?

如果你已經知道爬蟲是什麼了,那反爬蟲的概念應該就不難理解了。
反爬蟲其實就是網站用來防止機器人或自動程式大規模抓取網站內容的手段。
簡單來說,就是網站不想讓別人隨便拿走它們的資料,
所以會設計一些機制來阻止這種行為。

惡意爬蟲?!

那為什麼會導致有「反爬蟲」的出現呢?有人曾經用爬蟲做了什麼嗎?

講一個最貼近大家生活的例子,大家應該就知道了-黃牛
其實黃牛就是透過惡意機器人大量的爬取網站資料,透過機器人程式
大量的爬取系統可購買的票卷,進而可能導致票務系統負荷量過大而癱瘓,
或是最直觀的: 直接影響了一般消費者的購票體驗,進而導致黃牛票的產生。

所以這就是為什麼「反爬蟲」要存在,當一個技術產生後,
就必定會有人將它拿來做為不法用途,去做一些不法的勾當。
這時就需要一些措施去防範,也就是「反爬蟲」存在的意義。

常見的反爬蟲技術:

俗話說「知己知彼,百戰百勝」,在介紹完了什麼是反爬蟲後,我們也應該要來
學習它的一些基本技術,這樣在爬蟲時遇到相關的問題,我們才可以更輕鬆地去解決它。
而我要學習的內容大致可以分為幾個大點,分別為
「IP封鎖」、「頻繁請求限制」、「Captcha驗證」
那今天會先專注在 *「IP封鎖」*的部分,那廢話不多說,直接開始吧。

IP封鎖:

「IP封鎖」顧名思義,就是封鎖那些有安全疑慮的IP。
因為某些爬蟲會通過固定的 IP 地址進行大量的惡意請求,
而在這時,就可以針對這些 IP 來實施封鎖以防止流量洪水。

而在眾多的IP中,我們又可以把他們分為兩個部分:
黑名單(Blocklist)以及白名單(Allowlist)。應該可以透過名字清楚的了解到,
黑名單就是禁止的IP,意思就是會禁止來自該地對網頁的訪問 ;
而白名單則就是允許造訪網頁的IP,可以接收來自該地的訊息。

實作:

接下來就是進行實際操作的部分,但因為我的電腦目前沒有辦法下載Linux並下載Nginx,
所以這邊會先引用已經有的範例來做學習。

在設置完Nginx過後,我們會先針對要封鎖以及開放的IP進行分析撰寫,以下是相關程式碼:

https://ithelp.ithome.com.tw/upload/images/20240924/20169196EwLHvIZ4mc.png

在上述的範例程式碼中,我們可以看到第二行的deny 192.168.1.100;
意思就是封鎖來自此IP的進入權限; 而最後一行則是表示允許以外的其他全部IP進行訪問。

而如果要封鎖多個IP地,我們也可以運用以下方法:

https://ithelp.ithome.com.tw/upload/images/20240924/201691964RMtrVd8PB.png

透過上述範例的語法,我們就可以對多個不同的IP進行禁止訪問的動作。

而在操作完後,我們就還是不免俗的要來驗證一下有沒有順利執行:

https://ithelp.ithome.com.tw/upload/images/20240924/20169196Wicje4y8GL.png

以上的程式碼中,「sudo」的意義是在於讓系統認為是管理員在使用,
如此你就可以獲得較高的權限來進行訊息的驗證。

而 「-t」 則是用來跟服務器端說明要檢查語法是否正確,但只是檢查是否有錯誤,
而不直接進行執行。(若是有錯誤但選擇直接執行,就有可能會發生無法啟動的情況)

而若是檢查後為正確無誤,則會顯示出類似
"syntax is ok""test is successful" 的訊息,說明撰寫的語法是正確的,
如此我們就可以重啟Nginx,讓他對於我們剛剛所做出的設置進行執行。

https://ithelp.ithome.com.tw/upload/images/20240924/20169196XcQoT55Ylm.png

在上述的範例中,「systemctl」的意思是指一個用來管理系統服務的命令行工具,
它可以用來執行像是重啟(restart)、停止(stop)、開始(start)等動作。


小結:

在今天的學習中,我學習了一些關於反爬蟲的基本概念跟知識,
並針對IP封鎖進行了一些語法上的實作。我想前面的重點會先著重在把基礎打好,
畢竟要學習全部的可能100多種以上的語法並熟記,對現階段的我來說應該是不太實際,
我想應該從最初階的反爬蟲開始學起並打好基礎,對未來會比較有幫助。

參考資料:
https://blog.gtwang.org/linux/linux-basic-systemctl-systemd-service-unit-tutorial-examples/
https://ithelp.ithome.com.tw/articles/10157552
https://www.gaia.net/tc/news_detail/2/42/-2020
https://vocus.cc/article/613d6becfd897800013f0303


上一篇
[Day 9] HTML/CSS基礎 – DOM實作
下一篇
[Day 11] 頻繁請求限制
系列文
Python大戰之網頁爬蟲13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言